/*
 * GloboFisica.cpp
 *
 *  Created on: Oct 5, 2013
 *      Author: Hernan
 */

#include "GloboFisica.h"

typedef struct InfoEntidad {
   string *nombre;
   EntidadFisica *entidad; // le puse engranaje pero en realidad es una referencia a un body.
} InfoEntidad ;

GloboFisica::GloboFisica(b2World* world, float x, float y, float ancho, float alto, string tipo) : EntidadFisica(tipo) {

	this->definicionCuerpoFisico->position.Set(x, y);
	this->definicionCuerpoFisico->type =  b2_dynamicBody;
	this->definicionCuerpoFisico->fixedRotation = true;
	this->definicionCuerpoFisico->linearDamping = 0.9f;
	this->cuerpoFisico = world->CreateBody(definicionCuerpoFisico);

	b2CircleShape circulo;
	circulo.m_radius = ancho/2.0f;

	this->fixture = new b2FixtureDef();
	this->fixture->shape = &circulo;
	this->fixture->density = 0.1f;
	this->fixture->friction = 0.0f;
	this->cuerpoFisico->CreateFixture(this->fixture);


	this->guardarInformacionDeEntidad();
	this->alto = alto;
	this->ancho = ancho;

	// inicialmente esta inflado:

	this->estaInflado = true;
}

void GloboFisica::aplicarFuerzasFisicas(){
	if (this->estaInflado){
		b2Body* bodyGlobo = this->cuerpoFisico;
		b2Vec2 velActual = bodyGlobo->GetLinearVelocity();
		float velRequerida = 10;
		float deltaVel = velRequerida - velActual.y;
		float impulso = bodyGlobo->GetMass() * deltaVel;
		bodyGlobo->ApplyLinearImpulse( b2Vec2(0,impulso), bodyGlobo->GetWorldCenter());
	}
	if ((this->cuerpoFisico->GetPosition().y < 4) && (!this->estaInflado)){
		this->eliminarEntidadFisica(); /*lo pone para borrar*/
	}

}

void GloboFisica::pincharGlobo(){
	if (this->estaInflado){
		this->estaInflado = false;
		this->cuerpoFisico->GetFixtureList()->SetDensity(3.1f);
	}
}

bool GloboFisica::estaPinchado(){
	return (!this->estaInflado);
}

GloboFisica::~GloboFisica() {
	// TODO Auto-generated destructor stub
}

